package edu.hubu.supermarketmanagementsystem.service;

import edu.hubu.supermarketmanagementsystem.entity.Customer;
import edu.hubu.supermarketmanagementsystem.vo.ResultVO;

public interface CustomerService {
    /**
     * 用于注册顾客信息。
     * @param username 顾客的用户名。
     * @param name 顾客的姓名。
     * @param password 顾客的密码。
     * @param email 顾客的电子邮箱地址。
     * @param telephone 顾客的电话号码。
     * @param address 顾客的邮寄地址。
     * @return 带有状态码、提示信息和数据的 ResultVO 实体。
     * @param <T> 返回的上下文实体的数据类型。
     */
    <T> ResultVO<T> register(String username, String name, String password, String email, String telephone, String address, String  role);

    /**
     * 用于获取顾客列表。
     * @return 包含顾客列表的 ResultVO 实体。
     */
    ResultVO<Customer[]> getCustomersList();

    /**
     * 更改用户的基本信息。
     * @param id 待更改信息的用户ID。
     * @param newUsername 新用户名。
     * @param newName 新姓名。
     * @param newEmail 新电子邮件地址。
     * @param newTelephone 新电话号码。
     * @param newAddress 新收货地址。
     * @param newRole 新角色。
     * @return 如果成功则返回真，失败返回假。
     */
    <T> ResultVO<T> updateUser(Integer id, String newUsername, String newName, String newEmail , String newTelephone,String newAddress, String newRole);

    /**
     * 更改用户密码。
     * @param id 待更改密码的用户ID。
     * @param newPassword 新密码。
     * @return 如果成功则返回真，失败返回假。
     */
    ResultVO<Boolean> updatePassword(Integer id, String newPassword);

    /**
     * 删除用户。
     * @param id 待删除用户的ID。
     * @return 如果成功则返回真，失败返回假。
     */
    ResultVO<Boolean> deleteUser(Integer id);
}
